Class
#categories!
accessing!
testing!
utility!
private!
private-initialization!
event processing!
model access!
selection!
private-undo buffer!
undoable editing!
menus!
control!
preferences!
private-range selection! !
glyphsChanged!
2307727!
private!
1! !
character:focus:event:!
2315083!
event processing!
0Character:Visual:UIEvent:Boolean! !
recordUndo:!
2324523!
private-undo buffer!
1VarTuple[TextSelection,MODEL]:! !
selectLinesFrom:to:!
2312547!
private!
1Int:Int:! !
lineIsAllWhitespace:!
2309149!
private!
1Int:Boolean! !
autoIndent:!
2294354!
accessing!
0Boolean:! !
hasMenu!
2330166!
menus!
0Boolean! !
oldselectMatching:at:!
2336946!
private-range selection!
1Character:Int:! !
undoBuffer!
2314391!
private!
1LinkedList[Entry[VarTuple[TextSelection,MODEL]]]! !
keyDown:focus:event:!
2315690!
event processing!
0Symbol:Visual:UIEvent:Boolean! !
thisLineLeadingWhiteSpace!
2313046!
private!
1Str! !
glyphsForModel:!
2308131!
private!
1MODEL:SeqCltn[SeqCltn[Glyph]]! !
cursor!
2306904!
private!
1Cursor! !
isMultiLine:!
2295467!
accessing!
0Boolean:! !
enterString:!
2318576!
model access!
0Str:MODEL! !
font:!
2294637!
accessing!
0Font:! !
linesForString:!
2301780!
utility!
0Str:SeqCltn[SeqCltn[Glyph]]! !
preservingUndoDo:!
2311566!
private!
1[]:! !
split:collecting:!
2303643!
utility!
2Cltn[X]:[X def,^Glyph]:SeqCltn[SeqCltn[Glyph]]! !
replaceFrom:to:withModel:!
2320212!
model access!
0Point:Point:MODEL:MODEL! !
handleDoubleClick:at:!
2308321!
private!
1UIEvent:Point:Boolean! !
monoPainter!
2297741!
accessing!
0Boolean! !
replaceSelectionModelWithGlyphs:!
2321217!
model access!
0SeqCltn[SeqCltn[Glyph]]:MODEL! !
undoEnabled!
2314567!
private!
1Boolean! !
lines!
2310119!
private!
1Lines! !
typingSpot:!
2314238!
private!
1TextSelection:! !
autoAccept:!
2294020!
accessing!
0Boolean:! !
enterCharacter:!
2325343!
undoable editing!
0Character:! !
monoPainter:!
2297880!
accessing!
0Boolean:! !
editMenu!
2329425!
menus!
0Menu! !
linearGlyphAt:!
2295657!
accessing!
0Int:Glyph! !
selectionString!
2322238!
model access!
0Str! !
join:collecting:!
2301270!
utility!
2SeqCltn[SeqCltn[Glyph]]:[Glyph,^X def]:SeqCltn[X]! !
#group!
ui! !
selectTokenAt:!
2341537!
private-range selection!
1Int:! !
selectCodeParagraphBackFrom:!
2302798!
utility!
0Int:! !
indexOf:startingAt:caseSensitive:ifAbsent:!
2300946!
utility!
2Str:Int:Boolean:[^X def]:Int|X! !
selectRange!
2340065!
private-range selection!
1! !
endSpot!
2294497!
accessing!
0Point! !
paint:!
2298313!
accessing!
0Paint:! !
displayNowIfInvalid!
2332555!
control!
0! !
recordRedo:!
2324319!
private-undo buffer!
1VarTuple[TextSelection,MODEL]:! !
glyphBuilder!
2294776!
accessing!
0[MODEL,^SeqCltn[SeqCltn[Glyph]]]! !
oneShotModel:!
2298166!
accessing!
0Boolean:! !
cancelAndOnSuccess:!
2331818!
control!
0[]:! !
redoBuffer!
2312268!
private!
1LinkedList[Entry[VarTuple[TextSelection,MODEL]]]! !
changeFontAndColor!
2305120!
private!
1! !
findTokenEndFrom:inDirection:!
2334607!
private-range selection!
1Int:Int:Int! !
maxUndo:!
2296619!
accessing!
0Int:! !
from:inDirection:do:!
2335235!
private-range selection!
1Int:Boolean:[Int,CharacterGlyph]:! !
linearSpotAt:ifAbsent:!
2296160!
accessing!
2Int:[^X def]:Point|X! !
replaceSelectionWithModel:!
2321632!
model access!
0MODEL:MODEL! !
isCommentDelimiter:!
2335795!
private-range selection!
1Character:Boolean! !
model:!
2320010!
model access!
0MODEL:! !
scrollable:!
2299202!
accessing!
0Boolean:! !
maxUndo!
2296492!
accessing!
0Int! !
autoAccept!
2293813!
accessing!
0Boolean! !
leftDelimiters!
2336460!
private-range selection!
1SeqCltn[Character]! !
painter!
2298455!
accessing!
0Painter! !
selection:!
2323324!
selection!
0TextSelection:! !
recordEdit:!
2323977!
private-undo buffer!
1VarTuple[TextSelection,MODEL]:! !
modelString!
2302541!
utility!
0Str! !
prefsModifier!
2311254!
private!
1PreferenceModifier! !
lineStartsWithWhitespace:!
2309678!
private!
1Int:Boolean! !
buildBareVisualTop:!
2304356!
private!
1Boolean:Visual! !
#subtype!
true! !
showAllCurrentRows!
2334091!
preferences!
0! !
#abstract!
false! !
createGlyphsFromModel:!
2306705!
private!
1MODEL:! !
selectMatching:at:!
2338730!
private-range selection!
1Character:Int:! !
desiredRows!
2333190!
preferences!
0Int! !
modelBuilder!
2297104!
accessing!
0[SeqCltn[SeqCltn[Glyph]],^MODEL]! !
linearSelection:!
2322877!
selection!
0Tuple[Int,Int]:! !
modelOutOfDate:!
2297589!
accessing!
0Boolean:! !
model!
2296855!
accessing!
0MODEL! !
noUndo!
2311053!
private!
1! !
selectionEnd!
2323480!
selection!
0Point! !
isCarriageReturnGlyph:!
2308731!
private!
1Glyph:Boolean! !
fitToTextAndMakeVisible!
2307473!
private!
1! !
forwardDeleteModel!
2319306!
model access!
0MODEL! !
#extensionsAreSubtypes!
true! !
eraseHistory!
2307338!
private!
1! !
delete!
2325003!
undoable editing!
0! !
popUpMenu!
2330478!
menus!
0Menu! !
linearSelection!
2322513!
selection!
0Tuple[Int,Int]! !
noTypingSpot!
2310921!
private!
1! !
acceptsTabs!
2299343!
testing!
0Boolean! !
createGlyphsFromModel!
2306338!
private!
1! !
hasTypingSpot!
2308586!
private!
1Boolean! !
modelBuilder:!
2297271!
accessing!
0[SeqCltn[SeqCltn[Glyph]],^MODEL]:! !
infiniteUndo!
2295118!
accessing!
0! !
recomputePrefs!
2333532!
preferences!
0! !
#typeArgumentString!
MODEL ! !
#branded!
true! !
modelFromGlyphs!
2310429!
private!
1MODEL! !
autoIndent!
2294163!
accessing!
0Boolean! !
changing!
2332381!
control!
0! !
charGlyphFor:!
2299921!
utility!
0Character:Glyph! !
setPainter:!
2312815!
private!
1Painter:! !
undo!
2329013!
undoable editing!
0! !
desiredColumns:!
2332979!
preferences!
0Int:! !
replaceModelFrom:to:withGlyphs:!
2320720!
model access!
0Point:Point:SeqCltn[SeqCltn[Glyph]]:MODEL! !
exciseSelection!
2326234!
undoable editing!
0MODEL! !
showAllCurrentColumns!
2333807!
preferences!
0! !
deleteModel!
2318048!
model access!
0MODEL! !
prefsModifier:!
2311406!
private!
1PreferenceModifier:! !
rightDelimiters!
2338398!
private-range selection!
1SeqCltn[Character]! !
modelForGlyphs:!
2310242!
private!
1SeqCltn[SeqCltn[Glyph]]:MODEL! !
replaceSelectionWithGlyphs:!
2328611!
undoable editing!
0SeqCltn[SeqCltn[Glyph]]:MODEL! !
isMultiLine!
2295328!
accessing!
0Boolean! !
#comment!
Design note:  All mutation of the glyphs held by the Lines structure goes through the methods
in the 'model access' category.  Each method that does direct mutation of the glyphs not through
one of these methods must send (self glyphsChanged).  Any high-level operation that wants to
preserve undo/redo information should record the edit, and wrap the model access calls with
a call to #preservingUndoDo:.  The existing methods that record undo information are in the
'undoable editing' category.

Tags: %User %UI

 (c) 1995-1997 Sun Microsystems, Inc. ALL RIGHTS RESERVED. 
Use and distribution of this software is subject to the terms of the attached source license
! !
initialize!
6469405!
private-initialization!
1! !
redo!
2327754!
undoable editing!
0! !
glyphBuilder:!
2294944!
accessing!
0[MODEL,^SeqCltn[SeqCltn[Glyph]]]:! !
cutSelection!
2324806!
undoable editing!
0! !
typingSpot!
2314097!
private!
1TextSelection! !
oneShotModel!
2298025!
accessing!
0Boolean! !
noRedo!
2310720!
private!
1! !
doEnterCharacter:!
2307035!
private!
1Character:MODEL! !
typingIsUnbroken!
2313721!
private!
1Boolean! !
isDelimiterGlyph:!
2336199!
private-range selection!
1Glyph:Boolean! !
selectAll!
2338561!
private-range selection!
1! !
recordChange:!
2311971!
private!
1VarTuple[TextSelection,MODEL]:! !
buildLinesIfNeeded!
2331119!
control!
0! !
forwardDelete!
2327083!
undoable editing!
0! !
pasteSelection!
2327437!
undoable editing!
0! !
exciseSelectionGlyphs!
2326618!
undoable editing!
0SeqCltn[SeqCltn[Glyph]]! !
desiredRows:!
2333327!
preferences!
0Int:! !
desiredColumns!
2332836!
preferences!
0Int! !
extractStrFrom:!
2300089!
utility!
0SeqCltn[SeqCltn[Glyph]]:Str! !
copySelection!
2317819!
model access!
0! !
selectionModel!
2322017!
model access!
0MODEL! !
isDelimiter:!
2335965!
private-range selection!
1Character:Boolean! !
#superclassTypeString!
View[MODEL]! !
modelOutOfDate!
2297444!
accessing!
0Boolean! !
undoIsPossible!
2299703!
testing!
0Boolean! !
selection!
2323172!
selection!
0TextSelection! !
delimiterDirection:!
2334378!
private-range selection!
1Character:Int! !
#isGeneric!
true! !
painter:!
2298651!
accessing!
0Painter:! !
#instanceVariableString!
glyphBuilder <[MODEL, ^SeqCltn[SeqCltn[Glyph]] ]>
			"A block that takes a model value, and builds a collection
				of lines of glyphs"
modelBuilder <[SeqCltn[SeqCltn[Glyph]], ^MODEL]>
			"A block that takes a collection of lines of glyphs,
				and builds and returns a model value."
lines <Lines>
			"The visual containing the rows of glyphs"

undoBuffer <LinkedList[Entry[VarTuple[TextSelection,MODEL]]]>
maxUndo <Int>
			"The undo buffer holds no more than this many entries"

typingSpot <TextSelection>
			"Is non-nil if last edit was a char or backspace"
redoBuffer <LinkedList[Entry[VarTuple[TextSelection,MODEL]]]>
painter <Painter>
			"This holds the painter until the lines structure is created.  After that,
				we use the painter stored in the lines (so that we get the adapted painter)"
isMultiLine <Boolean>
			"If this is true, then we allow imbedded CRs, and accept must be done with
				ctrl-CR.  If false, then there is only one line, and accept happens on each character
				(and CRs are not processed).
				Escape always means cancel."
monoPainter <Boolean>
			"If this is true, all characters displayed should show the same font"
modelOutOfDate <Boolean>
			"If true, then the model does not reflect the glyphs, and must be rebuilt
				on demand.  This is NOT the same as hasBeenChanged, which
				reflects whether an accept has been done"

prefsModifier <PreferenceModifier>
desiredRows <Int>
			"# of rows (based on height of first row) to try to show. If nil, try to show all (at this moment)"
desiredColumns <Int>
			"# of desired cols, based on avg char width of font of first char. If nil, try to show all (at this moment)"

oneShotModel <Boolean>
			"If this is true, then the model is a consumable thing like a stream, in which case we must rebuild
				it from the glyphs each time it is asked for."
scrollable <Boolean>
			"If this is false, then no scrollport or viewport is put around the textview."
autoIndent <Boolean>
			"If true, then hitting return in a multiline textview will duplicate any leading whitespace
				from the line before"
autoAccept <Boolean>
			"If this is true, then accept happens on every keystroke (and cr is not processed
				for single line text editors)"
		! !
computePrefsFor:!
2305353!
private!
1PreferenceModifier:! !
replaceSelectionWith:!
2328239!
undoable editing!
0MODEL:MODEL! !
propertiesMenu!
2330711!
menus!
0Menu! !
selectionStart!
2323630!
selection!
0Point! !
matchingDelimiterFor:!
2336622!
private-range selection!
1Character:Character! !
#revision!
$Revision: 1.15 $! !
linearIndexFor:!
2295988!
accessing!
0Point:Int! !
scrollable!
2299065!
accessing!
0Boolean! !
lastEdit!
2323794!
private-undo buffer!
1VarTuple[TextSelection,MODEL]! !
isFocus:!
2308951!
private!
1Boolean:! !
menuBar!
2330302!
menus!
0Menu! !
glyphsIn:do:!
2300588!
utility!
0SeqCltn[SeqCltn[Glyph]]:[Glyph]:! !
redoIsPossible!
2299485!
testing!
0Boolean! !
